/**
 * @Author       : Mo 2427995270@qq.com
 * @Date         : 2022-06-08 16:11:26
 * @LastEditTime : 2025-08-17 07:15:29
 * @FilePath     : \ZN-1000-APP\libs\mobl_app.h
 * @Description  : mobl app头文件
 * @Version      : V1.0
 * @History      :
 * @Note         :
 */
#ifndef __mobl_app_H__
#define __mobl_app_H__

/***************************************Includes***********************************/

#include <stdint.h>

/*************************************Public Macros********************************/

#if defined(GD32F407)
#define MO_INFO_OFFSET 98U
#elif defined(STM32F40_41xxx)
#define MO_INFO_OFFSET 98U
#elif defined(GD32F10X_HD)
#define MO_INFO_OFFSET 76U
#elif defined(STM32F10X_HD)
#define MO_INFO_OFFSET 76U
#elif defined(PY32F071xB)
#define MO_INFO_OFFSET 48U
#else
#define MO_INFO_OFFSET 98U
#endif

// 启动标志所在地址
#define MO_START_FLAG_ADDR 0x1fffU
// 设备类型
#define MO_DEV_TYPE 0x10000000U
// 固件安装地址
#define MO_BL_INSTALL_ADDR 0x08000000U
// 固件信息地址 从中断向量表起始地址计算
#define MO_BL_INFO_ADDR (MO_INFO_OFFSET << 2)
// 用户程序安装地址
#define MO_APP_INSTALL_ADDR 0x08008000U
// 用户程序信息地址 从中断向量表起始地址计算
#define MO_APP_INFO_ADDR (MO_INFO_OFFSET << 2)


/***********************************Public Statement*******************************/
enum {
    START_FLAG_NORMAL = 0, // 正常启动
    START_FLAG_FLASH = 1,  // 片内flash安装
    START_FLAG_W25QXX = 2, // 片外flash安装
    START_FLAG_SD = 3,     // 从SD卡安装
    START_FLAG_MSC = 4,    // USB MSC安装
    START_FLAG_SERIAL = 5,   // 从串口传输
    START_FLAG_DTU = 6     // 从FTP下载
};
// app信息结构 须在app的中断向量表里写入
typedef struct {
    uint32_t version;  // app版本号
    uint32_t revision; // app修订日期
    uint32_t dev_type; // app的设备标识
    uint32_t fileCrc;  // app crc32码
    uint32_t fileLen;  // app文件总长 byte
} file_info_t;

/***********************************Public Functions*******************************/

void reboot(void);

/***************************************Public Variables**********************************/

extern file_info_t *installed_app_info; // 全局已安装app的信息
extern file_info_t *installed_bl_info;  // 全局固件信息
#endif
/* [] END OF FILE */
